{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "// 此部分代码由Python程序生成 请勿手动修改 begin\n",
      "/*\n",
      "多步计算CRC\n",
      "CRC宽度: 32\n",
      "CRC多项式: 0x04c11db7\n",
      "输入数据位宽: 32\n",
      "最后一段数据位宽: 16\n",
      "*/\n",
      "assign crc_calc[0] = crc[0] ^ crc[6] ^ crc[9] ^ crc[10] ^ crc[12] ^ crc[16] ^ crc[24] ^ crc[25] \n",
      "                    ^ crc[26] ^ crc[28] ^ crc[29] ^ crc[30] ^ crc[31] ^ din_xor[0];\n",
      "assign crc_calc[1] = crc[0] ^ crc[1] ^ crc[6] ^ crc[7] ^ crc[9] ^ crc[11] ^ crc[12] ^ crc[13] \n",
      "                    ^ crc[16] ^ crc[17] ^ crc[24] ^ crc[27] ^ crc[28] ^ din_xor[1];\n",
      "assign crc_calc[2] = crc[0] ^ crc[1] ^ crc[2] ^ crc[6] ^ crc[7] ^ crc[8] ^ crc[9] ^ crc[13] \n",
      "                    ^ crc[14] ^ crc[16] ^ crc[17] ^ crc[18] ^ crc[24] ^ crc[26] ^ crc[30] \n",
      "                    ^ crc[31] ^ din_xor[2];\n",
      "assign crc_calc[3] = crc[1] ^ crc[2] ^ crc[3] ^ crc[7] ^ crc[8] ^ crc[9] ^ crc[10] ^ crc[14] \n",
      "                    ^ crc[15] ^ crc[17] ^ crc[18] ^ crc[19] ^ crc[25] ^ crc[27] ^ crc[31] \n",
      "                    ^ din_xor[3];\n",
      "assign crc_calc[4] = crc[0] ^ crc[2] ^ crc[3] ^ crc[4] ^ crc[6] ^ crc[8] ^ crc[11] ^ crc[12] \n",
      "                    ^ crc[15] ^ crc[18] ^ crc[19] ^ crc[20] ^ crc[24] ^ crc[25] ^ crc[29] \n",
      "                    ^ crc[30] ^ crc[31] ^ din_xor[4];\n",
      "assign crc_calc[5] = crc[0] ^ crc[1] ^ crc[3] ^ crc[4] ^ crc[5] ^ crc[6] ^ crc[7] ^ crc[10] \n",
      "                    ^ crc[13] ^ crc[19] ^ crc[20] ^ crc[21] ^ crc[24] ^ crc[28] ^ crc[29] \n",
      "                    ^ din_xor[5];\n",
      "assign crc_calc[6] = crc[1] ^ crc[2] ^ crc[4] ^ crc[5] ^ crc[6] ^ crc[7] ^ crc[8] ^ crc[11] \n",
      "                    ^ crc[14] ^ crc[20] ^ crc[21] ^ crc[22] ^ crc[25] ^ crc[29] ^ crc[30] \n",
      "                    ^ din_xor[6];\n",
      "assign crc_calc[7] = crc[0] ^ crc[2] ^ crc[3] ^ crc[5] ^ crc[7] ^ crc[8] ^ crc[10] ^ crc[15] \n",
      "                    ^ crc[16] ^ crc[21] ^ crc[22] ^ crc[23] ^ crc[24] ^ crc[25] ^ crc[28] \n",
      "                    ^ crc[29] ^ din_xor[7];\n",
      "assign crc_calc[8] = crc[0] ^ crc[1] ^ crc[3] ^ crc[4] ^ crc[8] ^ crc[10] ^ crc[11] ^ crc[12] \n",
      "                    ^ crc[17] ^ crc[22] ^ crc[23] ^ crc[28] ^ crc[31] ^ din_xor[8];\n",
      "assign crc_calc[9] = crc[1] ^ crc[2] ^ crc[4] ^ crc[5] ^ crc[9] ^ crc[11] ^ crc[12] ^ crc[13] \n",
      "                    ^ crc[18] ^ crc[23] ^ crc[24] ^ crc[29] ^ din_xor[9];\n",
      "assign crc_calc[10] = crc[0] ^ crc[2] ^ crc[3] ^ crc[5] ^ crc[9] ^ crc[13] ^ crc[14] ^ crc[16] \n",
      "                    ^ crc[19] ^ crc[26] ^ crc[28] ^ crc[29] ^ crc[31] ^ din_xor[10];\n",
      "assign crc_calc[11] = crc[0] ^ crc[1] ^ crc[3] ^ crc[4] ^ crc[9] ^ crc[12] ^ crc[14] ^ crc[15] \n",
      "                    ^ crc[16] ^ crc[17] ^ crc[20] ^ crc[24] ^ crc[25] ^ crc[26] ^ crc[27] \n",
      "                    ^ crc[28] ^ crc[31] ^ din_xor[11];\n",
      "assign crc_calc[12] = crc[0] ^ crc[1] ^ crc[2] ^ crc[4] ^ crc[5] ^ crc[6] ^ crc[9] ^ crc[12] \n",
      "                    ^ crc[13] ^ crc[15] ^ crc[17] ^ crc[18] ^ crc[21] ^ crc[24] ^ crc[27] \n",
      "                    ^ crc[30] ^ crc[31] ^ din_xor[12];\n",
      "assign crc_calc[13] = crc[1] ^ crc[2] ^ crc[3] ^ crc[5] ^ crc[6] ^ crc[7] ^ crc[10] ^ crc[13] \n",
      "                    ^ crc[14] ^ crc[16] ^ crc[18] ^ crc[19] ^ crc[22] ^ crc[25] ^ crc[28] \n",
      "                    ^ crc[31] ^ din_xor[13];\n",
      "assign crc_calc[14] = crc[2] ^ crc[3] ^ crc[4] ^ crc[6] ^ crc[7] ^ crc[8] ^ crc[11] ^ crc[14] \n",
      "                    ^ crc[15] ^ crc[17] ^ crc[19] ^ crc[20] ^ crc[23] ^ crc[26] ^ crc[29] \n",
      "                    ^ din_xor[14];\n",
      "assign crc_calc[15] = crc[3] ^ crc[4] ^ crc[5] ^ crc[7] ^ crc[8] ^ crc[9] ^ crc[12] ^ crc[15] \n",
      "                    ^ crc[16] ^ crc[18] ^ crc[20] ^ crc[21] ^ crc[24] ^ crc[27] ^ crc[30] \n",
      "                    ^ din_xor[15];\n",
      "assign crc_calc[16] = crc[0] ^ crc[4] ^ crc[5] ^ crc[8] ^ crc[12] ^ crc[13] ^ crc[17] ^ crc[19] \n",
      "                    ^ crc[21] ^ crc[22] ^ crc[24] ^ crc[26] ^ crc[29] ^ crc[30] ^ din_xor[16];\n",
      "assign crc_calc[17] = crc[1] ^ crc[5] ^ crc[6] ^ crc[9] ^ crc[13] ^ crc[14] ^ crc[18] ^ crc[20] \n",
      "                    ^ crc[22] ^ crc[23] ^ crc[25] ^ crc[27] ^ crc[30] ^ crc[31] ^ din_xor[17];\n",
      "assign crc_calc[18] = crc[2] ^ crc[6] ^ crc[7] ^ crc[10] ^ crc[14] ^ crc[15] ^ crc[19] ^ crc[21] \n",
      "                    ^ crc[23] ^ crc[24] ^ crc[26] ^ crc[28] ^ crc[31] ^ din_xor[18];\n",
      "assign crc_calc[19] = crc[3] ^ crc[7] ^ crc[8] ^ crc[11] ^ crc[15] ^ crc[16] ^ crc[20] ^ crc[22] \n",
      "                    ^ crc[24] ^ crc[25] ^ crc[27] ^ crc[29] ^ din_xor[19];\n",
      "assign crc_calc[20] = crc[4] ^ crc[8] ^ crc[9] ^ crc[12] ^ crc[16] ^ crc[17] ^ crc[21] ^ crc[23] \n",
      "                    ^ crc[25] ^ crc[26] ^ crc[28] ^ crc[30] ^ din_xor[20];\n",
      "assign crc_calc[21] = crc[5] ^ crc[9] ^ crc[10] ^ crc[13] ^ crc[17] ^ crc[18] ^ crc[22] ^ crc[24] \n",
      "                    ^ crc[26] ^ crc[27] ^ crc[29] ^ crc[31] ^ din_xor[21];\n",
      "assign crc_calc[22] = crc[0] ^ crc[9] ^ crc[11] ^ crc[12] ^ crc[14] ^ crc[16] ^ crc[18] ^ crc[19] \n",
      "                    ^ crc[23] ^ crc[24] ^ crc[26] ^ crc[27] ^ crc[29] ^ crc[31] ^ din_xor[22];\n",
      "assign crc_calc[23] = crc[0] ^ crc[1] ^ crc[6] ^ crc[9] ^ crc[13] ^ crc[15] ^ crc[16] ^ crc[17] \n",
      "                    ^ crc[19] ^ crc[20] ^ crc[26] ^ crc[27] ^ crc[29] ^ crc[31] ^ din_xor[23];\n",
      "assign crc_calc[24] = crc[1] ^ crc[2] ^ crc[7] ^ crc[10] ^ crc[14] ^ crc[16] ^ crc[17] ^ crc[18] \n",
      "                    ^ crc[20] ^ crc[21] ^ crc[27] ^ crc[28] ^ crc[30] ^ din_xor[24];\n",
      "assign crc_calc[25] = crc[2] ^ crc[3] ^ crc[8] ^ crc[11] ^ crc[15] ^ crc[17] ^ crc[18] ^ crc[19] \n",
      "                    ^ crc[21] ^ crc[22] ^ crc[28] ^ crc[29] ^ crc[31] ^ din_xor[25];\n",
      "assign crc_calc[26] = crc[0] ^ crc[3] ^ crc[4] ^ crc[6] ^ crc[10] ^ crc[18] ^ crc[19] ^ crc[20] \n",
      "                    ^ crc[22] ^ crc[23] ^ crc[24] ^ crc[25] ^ crc[26] ^ crc[28] ^ crc[31] \n",
      "                    ^ din_xor[26];\n",
      "assign crc_calc[27] = crc[1] ^ crc[4] ^ crc[5] ^ crc[7] ^ crc[11] ^ crc[19] ^ crc[20] ^ crc[21] \n",
      "                    ^ crc[23] ^ crc[24] ^ crc[25] ^ crc[26] ^ crc[27] ^ crc[29] ^ din_xor[27];\n",
      "assign crc_calc[28] = crc[2] ^ crc[5] ^ crc[6] ^ crc[8] ^ crc[12] ^ crc[20] ^ crc[21] ^ crc[22] \n",
      "                    ^ crc[24] ^ crc[25] ^ crc[26] ^ crc[27] ^ crc[28] ^ crc[30] ^ din_xor[28];\n",
      "assign crc_calc[29] = crc[3] ^ crc[6] ^ crc[7] ^ crc[9] ^ crc[13] ^ crc[21] ^ crc[22] ^ crc[23] \n",
      "                    ^ crc[25] ^ crc[26] ^ crc[27] ^ crc[28] ^ crc[29] ^ crc[31] ^ din_xor[29];\n",
      "assign crc_calc[30] = crc[4] ^ crc[7] ^ crc[8] ^ crc[10] ^ crc[14] ^ crc[22] ^ crc[23] ^ crc[24] \n",
      "                    ^ crc[26] ^ crc[27] ^ crc[28] ^ crc[29] ^ crc[30] ^ din_xor[30];\n",
      "assign crc_calc[31] = crc[5] ^ crc[8] ^ crc[9] ^ crc[11] ^ crc[15] ^ crc[23] ^ crc[24] ^ crc[25] \n",
      "                    ^ crc[27] ^ crc[28] ^ crc[29] ^ crc[30] ^ crc[31] ^ din_xor[31];\n",
      "// 最后一段数据的计算代码, 已考虑了补CRC宽度个0\n",
      "assign crc_calc_last[0] = crc[0] ^ crc[8] ^ crc[9] ^ crc[10] ^ crc[12] ^ crc[13] ^ crc[14] \n",
      "                    ^ crc[15] ^ crc[16] ^ crc[18] ^ crc[21] ^ crc[28] ^ crc[29] ^ crc[31] \n",
      "                    ^ din_xor[16] ^ din_xor[22] ^ din_xor[25] ^ din_xor[26] ^ din_xor[28];\n",
      "assign crc_calc_last[1] = crc[0] ^ crc[1] ^ crc[8] ^ crc[11] ^ crc[12] ^ crc[17] ^ crc[18] \n",
      "                    ^ crc[19] ^ crc[21] ^ crc[22] ^ crc[28] ^ crc[30] ^ crc[31] ^ din_xor[16] \n",
      "                    ^ din_xor[17] ^ din_xor[22] ^ din_xor[23] ^ din_xor[25] ^ din_xor[27] \n",
      "                    ^ din_xor[28] ^ din_xor[29];\n",
      "assign crc_calc_last[2] = crc[0] ^ crc[1] ^ crc[2] ^ crc[8] ^ crc[10] ^ crc[14] ^ crc[15] \n",
      "                    ^ crc[16] ^ crc[19] ^ crc[20] ^ crc[21] ^ crc[22] ^ crc[23] ^ crc[28] \n",
      "                    ^ din_xor[16] ^ din_xor[17] ^ din_xor[18] ^ din_xor[22] ^ din_xor[23] \n",
      "                    ^ din_xor[24] ^ din_xor[25] ^ din_xor[29] ^ din_xor[30];\n",
      "assign crc_calc_last[3] = crc[1] ^ crc[2] ^ crc[3] ^ crc[9] ^ crc[11] ^ crc[15] ^ crc[16] \n",
      "                    ^ crc[17] ^ crc[20] ^ crc[21] ^ crc[22] ^ crc[23] ^ crc[24] ^ crc[29] \n",
      "                    ^ din_xor[17] ^ din_xor[18] ^ din_xor[19] ^ din_xor[23] ^ din_xor[24] \n",
      "                    ^ din_xor[25] ^ din_xor[26] ^ din_xor[30] ^ din_xor[31];\n",
      "assign crc_calc_last[4] = crc[2] ^ crc[3] ^ crc[4] ^ crc[8] ^ crc[9] ^ crc[13] ^ crc[14] ^ crc[15] \n",
      "                    ^ crc[17] ^ crc[22] ^ crc[23] ^ crc[24] ^ crc[25] ^ crc[28] ^ crc[29] \n",
      "                    ^ crc[30] ^ crc[31] ^ din_xor[16] ^ din_xor[18] ^ din_xor[19] ^ din_xor[20] \n",
      "                    ^ din_xor[22] ^ din_xor[24] ^ din_xor[27] ^ din_xor[28] ^ din_xor[31];\n",
      "assign crc_calc_last[5] = crc[3] ^ crc[4] ^ crc[5] ^ crc[8] ^ crc[12] ^ crc[13] ^ crc[21] \n",
      "                    ^ crc[23] ^ crc[24] ^ crc[25] ^ crc[26] ^ crc[28] ^ crc[30] ^ din_xor[16] \n",
      "                    ^ din_xor[17] ^ din_xor[19] ^ din_xor[20] ^ din_xor[21] ^ din_xor[22] \n",
      "                    ^ din_xor[23] ^ din_xor[26] ^ din_xor[29];\n",
      "assign crc_calc_last[6] = crc[4] ^ crc[5] ^ crc[6] ^ crc[9] ^ crc[13] ^ crc[14] ^ crc[22] \n",
      "                    ^ crc[24] ^ crc[25] ^ crc[26] ^ crc[27] ^ crc[29] ^ crc[31] ^ din_xor[17] \n",
      "                    ^ din_xor[18] ^ din_xor[20] ^ din_xor[21] ^ din_xor[22] ^ din_xor[23] \n",
      "                    ^ din_xor[24] ^ din_xor[27] ^ din_xor[30];\n",
      "assign crc_calc_last[7] = crc[0] ^ crc[5] ^ crc[6] ^ crc[7] ^ crc[8] ^ crc[9] ^ crc[12] ^ crc[13] \n",
      "                    ^ crc[16] ^ crc[18] ^ crc[21] ^ crc[23] ^ crc[25] ^ crc[26] ^ crc[27] \n",
      "                    ^ crc[29] ^ crc[30] ^ crc[31] ^ din_xor[16] ^ din_xor[18] ^ din_xor[19] \n",
      "                    ^ din_xor[21] ^ din_xor[23] ^ din_xor[24] ^ din_xor[26] ^ din_xor[31];\n",
      "assign crc_calc_last[8] = crc[1] ^ crc[6] ^ crc[7] ^ crc[12] ^ crc[15] ^ crc[16] ^ crc[17] \n",
      "                    ^ crc[18] ^ crc[19] ^ crc[21] ^ crc[22] ^ crc[24] ^ crc[26] ^ crc[27] \n",
      "                    ^ crc[29] ^ crc[30] ^ din_xor[16] ^ din_xor[17] ^ din_xor[19] ^ din_xor[20] \n",
      "                    ^ din_xor[24] ^ din_xor[26] ^ din_xor[27] ^ din_xor[28];\n",
      "assign crc_calc_last[9] = crc[2] ^ crc[7] ^ crc[8] ^ crc[13] ^ crc[16] ^ crc[17] ^ crc[18] \n",
      "                    ^ crc[19] ^ crc[20] ^ crc[22] ^ crc[23] ^ crc[25] ^ crc[27] ^ crc[28] \n",
      "                    ^ crc[30] ^ crc[31] ^ din_xor[17] ^ din_xor[18] ^ din_xor[20] ^ din_xor[21] \n",
      "                    ^ din_xor[25] ^ din_xor[27] ^ din_xor[28] ^ din_xor[29];\n",
      "assign crc_calc_last[10] = crc[0] ^ crc[3] ^ crc[10] ^ crc[12] ^ crc[13] ^ crc[15] ^ crc[16] \n",
      "                    ^ crc[17] ^ crc[19] ^ crc[20] ^ crc[23] ^ crc[24] ^ crc[26] ^ din_xor[16] \n",
      "                    ^ din_xor[18] ^ din_xor[19] ^ din_xor[21] ^ din_xor[25] ^ din_xor[29] \n",
      "                    ^ din_xor[30];\n",
      "assign crc_calc_last[11] = crc[0] ^ crc[1] ^ crc[4] ^ crc[8] ^ crc[9] ^ crc[10] ^ crc[11] \n",
      "                    ^ crc[12] ^ crc[15] ^ crc[17] ^ crc[20] ^ crc[24] ^ crc[25] ^ crc[27] \n",
      "                    ^ crc[28] ^ crc[29] ^ crc[31] ^ din_xor[16] ^ din_xor[17] ^ din_xor[19] \n",
      "                    ^ din_xor[20] ^ din_xor[25] ^ din_xor[28] ^ din_xor[30] ^ din_xor[31];\n",
      "assign crc_calc_last[12] = crc[1] ^ crc[2] ^ crc[5] ^ crc[8] ^ crc[11] ^ crc[14] ^ crc[15] \n",
      "                    ^ crc[25] ^ crc[26] ^ crc[30] ^ crc[31] ^ din_xor[16] ^ din_xor[17] \n",
      "                    ^ din_xor[18] ^ din_xor[20] ^ din_xor[21] ^ din_xor[22] ^ din_xor[25] \n",
      "                    ^ din_xor[28] ^ din_xor[29] ^ din_xor[31];\n",
      "assign crc_calc_last[13] = crc[0] ^ crc[2] ^ crc[3] ^ crc[6] ^ crc[9] ^ crc[12] ^ crc[15] \n",
      "                    ^ crc[16] ^ crc[26] ^ crc[27] ^ crc[31] ^ din_xor[17] ^ din_xor[18] \n",
      "                    ^ din_xor[19] ^ din_xor[21] ^ din_xor[22] ^ din_xor[23] ^ din_xor[26] \n",
      "                    ^ din_xor[29] ^ din_xor[30];\n",
      "assign crc_calc_last[14] = crc[1] ^ crc[3] ^ crc[4] ^ crc[7] ^ crc[10] ^ crc[13] ^ crc[16] \n",
      "                    ^ crc[17] ^ crc[27] ^ crc[28] ^ din_xor[18] ^ din_xor[19] ^ din_xor[20] \n",
      "                    ^ din_xor[22] ^ din_xor[23] ^ din_xor[24] ^ din_xor[27] ^ din_xor[30] \n",
      "                    ^ din_xor[31];\n",
      "assign crc_calc_last[15] = crc[0] ^ crc[2] ^ crc[4] ^ crc[5] ^ crc[8] ^ crc[11] ^ crc[14] \n",
      "                    ^ crc[17] ^ crc[18] ^ crc[28] ^ crc[29] ^ din_xor[19] ^ din_xor[20] \n",
      "                    ^ din_xor[21] ^ din_xor[23] ^ din_xor[24] ^ din_xor[25] ^ din_xor[28] \n",
      "                    ^ din_xor[31];\n",
      "assign crc_calc_last[16] = crc[1] ^ crc[3] ^ crc[5] ^ crc[6] ^ crc[8] ^ crc[10] ^ crc[13] \n",
      "                    ^ crc[14] ^ crc[16] ^ crc[19] ^ crc[21] ^ crc[28] ^ crc[30] ^ crc[31] \n",
      "                    ^ din_xor[16] ^ din_xor[20] ^ din_xor[21] ^ din_xor[24] ^ din_xor[28] \n",
      "                    ^ din_xor[29];\n",
      "assign crc_calc_last[17] = crc[2] ^ crc[4] ^ crc[6] ^ crc[7] ^ crc[9] ^ crc[11] ^ crc[14] \n",
      "                    ^ crc[15] ^ crc[17] ^ crc[20] ^ crc[22] ^ crc[29] ^ crc[31] ^ din_xor[17] \n",
      "                    ^ din_xor[21] ^ din_xor[22] ^ din_xor[25] ^ din_xor[29] ^ din_xor[30];\n",
      "assign crc_calc_last[18] = crc[3] ^ crc[5] ^ crc[7] ^ crc[8] ^ crc[10] ^ crc[12] ^ crc[15] \n",
      "                    ^ crc[16] ^ crc[18] ^ crc[21] ^ crc[23] ^ crc[30] ^ din_xor[18] ^ din_xor[22] \n",
      "                    ^ din_xor[23] ^ din_xor[26] ^ din_xor[30] ^ din_xor[31];\n",
      "assign crc_calc_last[19] = crc[0] ^ crc[4] ^ crc[6] ^ crc[8] ^ crc[9] ^ crc[11] ^ crc[13] \n",
      "                    ^ crc[16] ^ crc[17] ^ crc[19] ^ crc[22] ^ crc[24] ^ crc[31] ^ din_xor[19] \n",
      "                    ^ din_xor[23] ^ din_xor[24] ^ din_xor[27] ^ din_xor[31];\n",
      "assign crc_calc_last[20] = crc[0] ^ crc[1] ^ crc[5] ^ crc[7] ^ crc[9] ^ crc[10] ^ crc[12] \n",
      "                    ^ crc[14] ^ crc[17] ^ crc[18] ^ crc[20] ^ crc[23] ^ crc[25] ^ din_xor[20] \n",
      "                    ^ din_xor[24] ^ din_xor[25] ^ din_xor[28];\n",
      "assign crc_calc_last[21] = crc[1] ^ crc[2] ^ crc[6] ^ crc[8] ^ crc[10] ^ crc[11] ^ crc[13] \n",
      "                    ^ crc[15] ^ crc[18] ^ crc[19] ^ crc[21] ^ crc[24] ^ crc[26] ^ din_xor[21] \n",
      "                    ^ din_xor[25] ^ din_xor[26] ^ din_xor[29];\n",
      "assign crc_calc_last[22] = crc[0] ^ crc[2] ^ crc[3] ^ crc[7] ^ crc[8] ^ crc[10] ^ crc[11] \n",
      "                    ^ crc[13] ^ crc[15] ^ crc[18] ^ crc[19] ^ crc[20] ^ crc[21] ^ crc[22] \n",
      "                    ^ crc[25] ^ crc[27] ^ crc[28] ^ crc[29] ^ crc[31] ^ din_xor[16] ^ din_xor[25] \n",
      "                    ^ din_xor[27] ^ din_xor[28] ^ din_xor[30];\n",
      "assign crc_calc_last[23] = crc[0] ^ crc[1] ^ crc[3] ^ crc[4] ^ crc[10] ^ crc[11] ^ crc[13] \n",
      "                    ^ crc[15] ^ crc[18] ^ crc[19] ^ crc[20] ^ crc[22] ^ crc[23] ^ crc[26] \n",
      "                    ^ crc[30] ^ crc[31] ^ din_xor[16] ^ din_xor[17] ^ din_xor[22] ^ din_xor[25] \n",
      "                    ^ din_xor[29] ^ din_xor[31];\n",
      "assign crc_calc_last[24] = crc[0] ^ crc[1] ^ crc[2] ^ crc[4] ^ crc[5] ^ crc[11] ^ crc[12] \n",
      "                    ^ crc[14] ^ crc[16] ^ crc[19] ^ crc[20] ^ crc[21] ^ crc[23] ^ crc[24] \n",
      "                    ^ crc[27] ^ crc[31] ^ din_xor[17] ^ din_xor[18] ^ din_xor[23] ^ din_xor[26] \n",
      "                    ^ din_xor[30];\n",
      "assign crc_calc_last[25] = crc[1] ^ crc[2] ^ crc[3] ^ crc[5] ^ crc[6] ^ crc[12] ^ crc[13] \n",
      "                    ^ crc[15] ^ crc[17] ^ crc[20] ^ crc[21] ^ crc[22] ^ crc[24] ^ crc[25] \n",
      "                    ^ crc[28] ^ din_xor[18] ^ din_xor[19] ^ din_xor[24] ^ din_xor[27] ^ din_xor[31];\n",
      "assign crc_calc_last[26] = crc[2] ^ crc[3] ^ crc[4] ^ crc[6] ^ crc[7] ^ crc[8] ^ crc[9] ^ crc[10] \n",
      "                    ^ crc[12] ^ crc[15] ^ crc[22] ^ crc[23] ^ crc[25] ^ crc[26] ^ crc[28] \n",
      "                    ^ crc[31] ^ din_xor[16] ^ din_xor[19] ^ din_xor[20] ^ din_xor[22] ^ din_xor[26];\n",
      "assign crc_calc_last[27] = crc[3] ^ crc[4] ^ crc[5] ^ crc[7] ^ crc[8] ^ crc[9] ^ crc[10] ^ crc[11] \n",
      "                    ^ crc[13] ^ crc[16] ^ crc[23] ^ crc[24] ^ crc[26] ^ crc[27] ^ crc[29] \n",
      "                    ^ din_xor[17] ^ din_xor[20] ^ din_xor[21] ^ din_xor[23] ^ din_xor[27];\n",
      "assign crc_calc_last[28] = crc[4] ^ crc[5] ^ crc[6] ^ crc[8] ^ crc[9] ^ crc[10] ^ crc[11] \n",
      "                    ^ crc[12] ^ crc[14] ^ crc[17] ^ crc[24] ^ crc[25] ^ crc[27] ^ crc[28] \n",
      "                    ^ crc[30] ^ din_xor[18] ^ din_xor[21] ^ din_xor[22] ^ din_xor[24] ^ din_xor[28];\n",
      "assign crc_calc_last[29] = crc[5] ^ crc[6] ^ crc[7] ^ crc[9] ^ crc[10] ^ crc[11] ^ crc[12] \n",
      "                    ^ crc[13] ^ crc[15] ^ crc[18] ^ crc[25] ^ crc[26] ^ crc[28] ^ crc[29] \n",
      "                    ^ crc[31] ^ din_xor[19] ^ din_xor[22] ^ din_xor[23] ^ din_xor[25] ^ din_xor[29];\n",
      "assign crc_calc_last[30] = crc[6] ^ crc[7] ^ crc[8] ^ crc[10] ^ crc[11] ^ crc[12] ^ crc[13] \n",
      "                    ^ crc[14] ^ crc[16] ^ crc[19] ^ crc[26] ^ crc[27] ^ crc[29] ^ crc[30] \n",
      "                    ^ din_xor[20] ^ din_xor[23] ^ din_xor[24] ^ din_xor[26] ^ din_xor[30];\n",
      "assign crc_calc_last[31] = crc[7] ^ crc[8] ^ crc[9] ^ crc[11] ^ crc[12] ^ crc[13] ^ crc[14] \n",
      "                    ^ crc[15] ^ crc[17] ^ crc[20] ^ crc[27] ^ crc[28] ^ crc[30] ^ crc[31] \n",
      "                    ^ din_xor[21] ^ din_xor[24] ^ din_xor[25] ^ din_xor[27] ^ din_xor[31];\n",
      "// 此部分代码由Python程序生成 请勿手动修改 end\n"
     ]
    }
   ],
   "source": [
    "import myCRC\n",
    "\n",
    "# myCRC示例用法\n",
    "crc_custom = myCRC.CRCConfig(\n",
    "    # 只需要这两个参数\n",
    "    width       = 32    ,\n",
    "    poly        = 0x04C11DB7,\n",
    ")\n",
    "\n",
    "din_width = 32\n",
    "last_din_width = 16\n",
    "verilog_code = myCRC.CRCVerilog(crc_custom).generate_verilog_crc_multi_step_code(din_width, last_din_width)\n",
    "print(verilog_code)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
